<?php

class Application_Model_Lista
{
	// procura e  mostra um par de valores com indice nominal
 	public function fetchPair() {
 		
        $lista= new Application_Model_DbTable_Lista();
        $select = 'SELECT idlista,nome 
        			 FROM lista_email 
        		 ORDER BY nome DESC';                      
        return $lista->getAdapter()->fetchPairs($select);
    }

    //listando todas as listas
    public function listaAllListas()
    {
        $lista= new Application_Model_DbTable_Lista();
        $select = $lista->select()
            ->setIntegrityCheck(false)
            ->from(array('l' => 'lista_email'))
            ->columns(array('idlista' => 'l.idlista', 'nome' => 'l.nome','total'=>'COUNT(e.lista_idlista)'))
            ->joinLeft(array('e' => 'email_lista_email'), 'l.idlista=e.lista_idlista', array())
            ->group('l.nome')         
            ->order('idlista DESC');
            
        return $lista->fetchAll($select);
    }
    
 	// inserindo nova lista
    public function addLista ($nome)
    {
        $data = array('nome' => $nome);
        $lista = new Application_Model_DbTable_Lista();
        $lista->insert($data);
    }
    
	// excluindo lista
    public function excluirLista ($idlista)
    {
        $lista = new Application_Model_DbTable_Lista();
        $id = (int) $idlista;
        $where = $lista->getAdapter()->quoteInto('idlista=?', $id); // removendo lista
        $lista->delete($where);
    }
    
    // procura por id
    public function procura ($idlista)
    {
        $lista = new Application_Model_DbTable_Lista();
        $where = $lista->getAdapter()->quoteInto('idlista=?', $idlista);
        $rlista = $lista->fetchRow($where);
        return $rlista->toArray();
    }
    // atualizar grupo
    public function update ($idlista, $nome)
    {
        $lista = new Application_Model_DbTable_Lista();
        $data = array('nome' => $nome);
        $where = $lista->getAdapter()->quoteInto('idlista=?', $idlista);
        $lista->update($data, $where);
    }
    
    // exibir emails
    public function exibeEmail ($idlista)
    {
        $lista = new Application_Model_DbTable_Listaemail();
        
        $select = $lista->select()
            ->setIntegrityCheck(false)
            ->from(array('le' => 'email_lista_email'))
            ->columns(array('idlista' => 'le.lista_idlista', 'email' => 'e.email', 'optin'=>'e.optin','idemail'=>'e.idemail'))
            ->join(array('e' => 'email'), 'e.idemail=le.email_idemail', array())
            ->where($lista->getAdapter()->quoteInto('le.lista_idlista=?', $idlista))        
            ->order('email asc');
            
            return $lista->fetchAll($select);
    }
	// excluindo email da lista
    public function excluiremail ($idlista, $idemail)
    {
        $lista = new Application_Model_DbTable_Listaemail();
        $idlista = (int) $idlista;
        $idemail = (int) $idemail;

        $where1 = $lista->getAdapter()->quoteInto('lista_idlista=?', $idlista);
        $where2 = $lista->getAdapter()->quoteInto('email_idemail=?', $idemail);
        
        $lista->delete($where1.' AND '.$where2);
    }
    public function contaEmailLista($idlista)
    {
    	$lista = new Application_Model_DbTable_Lista();
    	$select ="SELECT count(e.lista_idlista) as total 
    	 		  FROM lista_email as l, email_lista_email as e, email em 
    	 		  WHERE e.lista_idlista=$idlista 
    	 		  AND l.idlista = e.lista_idlista 
    	 		  AND em.idemail = e.email_idemail 
    	 		  AND em.optin = 1";
    	return $lista->getAdapter()->fetchAll($select);
    }
    
}

